#leetcode题目
# 小米笔试 - 防火墙问题
class UnionFind:
    def __init__(self, n):
        self.parent = list(range(n))
        self.rank = [0] * n
    
    def find(self, x):
        if self.parent[x] != x:
            self.parent[x] = self.find(self.parent[x])
        return self.parent[x]
    
    def union(self, x, y):
        px, py = self.find(x), self.find(y)
        if px == py:
            return
        if self.rank[px] < self.rank[py]:
            self.parent[px] = py
        elif self.rank[px] > self.rank[py]:
            self.parent[py] = px
        else:
            self.parent[py] = px
            self.rank[px] += 1
    
    def connected(self, x, y):
        return self.find(x) == self.find(y)

def solve():
    t = int(input()) #读取测试用例的数量，指的是读的第一行的数字
    for _ in range(t):
        n, m = map(int, input().split()) #读取第二行的数字，也就是n和m
        
        # 读取m对"不同类型"的攻击
        different_pairs = []
        line1 = list(map(int, input().split()))#读取接下来的第一行，也就是line1
        line2 = list(map(int, input().split()))#读取接下来的第二行，也就是line2
        
        for i in range(m):
            x, y = line1[i], line2[i] #读取line1和line2的第i个元素，也就是x和y
            # 转换为0-based索引
            different_pairs.append((x-1, y-1))
        
        # 使用并查集维护"相同类型"关系
        uf = UnionFind(n)
        
        # 构建"相同类型"关系
        # 如果两个攻击不在different_pairs中，说明它们类型相同
        same_pairs = []
        for i in range(n):
            for j in range(i+1, n):
                if (i, j) not in different_pairs and (j, i) not in different_pairs:
                    same_pairs.append((i, j))
        
        # 将相同类型的攻击合并
        for x, y in same_pairs:
            uf.union(x, y)
        
        # 检查是否有矛盾
        # 如果两个攻击被标记为"不同类型"，但它们实际上属于同一个连通分量，则矛盾
        valid = True
        for x, y in different_pairs:
            if uf.connected(x, y):
                valid = False
                break
        
        print("Yes" if valid else "No")

def test_with_examples():
    """使用题目中的测试用例进行测试"""
    print("=== 测试用例1 ===")
    # 测试用例1: 4 4
    # 1 1 4 4
    # 2 3 2 3
    # 预期输出: Yes
    test_input1 = """3
4 4
1 1 4 4
2 3 2 3
3 1
1
2
5 8
1 1 2 5 1 3 2 3
2 4 5 4 3 5 3 4"""
    
    # 模拟输入
    import io
    import sys
    #为什么需要这样做：
    # 在ACM竞赛中，程序需要从标准输入读取数据
    # 但我们在本地测试时，不想每次都手动输入测试用例
    # 所以临时将输入源改为字符串，测试完后再恢复
    original_stdin = sys.stdin # 保存原始的stdin（标准输入流），因为我们要临时替换它
    #sys.stdin 是Python的标准输入流，通常连接到键盘输入
    #这里先备份一下，后面需要恢复
    sys.stdin = io.StringIO(test_input1) #io.StringIO(test_input1) 是将test_input1转换为StringIO对象，然后赋值给sys.stdin
    #这样当程序调用input()时，会从字符串中读取而不是从键盘输入
    
    try:
        solve() #调用我们的解题函数，此时它会从字符串输入流中读取数据
    finally:
        sys.stdin = original_stdin #恢复原始的stdin，这样程序可以正常从键盘输入，也就是可以验证新的数据。

if __name__ == "__main__":
    # 运行测试用例
    test_with_examples()
    
    print("\n=== 手动输入模式 ===")
    print("如果需要手动输入，请取消注释下面这行：")
    print("# solve()")
    # solve()  # 取消注释这行来启用手动输入模式